package com.zenithmind.task.pojo.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 任务VO类
 * 
 * @author ZenithMind Team
 * @since 2025-01-09
 */
@Data
public class TaskVO {

    /**
     * 任务ID
     */
    private String id;

    /**
     * 任务标题
     */
    private String title;

    /**
     * 任务描述
     */
    private String description;

    /**
     * 任务状态：1-待办，2-进行中，3-已完成，4-已取消，5-已暂停
     */
    private Integer status;

    /**
     * 状态文本
     */
    private String statusText;

    /**
     * 优先级：1-低，2-中，3-高，4-紧急
     */
    private Integer priority;

    /**
     * 优先级文本
     */
    private String priorityText;

    /**
     * 优先级颜色
     */
    private String priorityColor;

    /**
     * 任务类型：1-个人任务，2-团队任务，3-项目任务
     */
    private Integer taskType;

    /**
     * 任务类型文本
     */
    private String taskTypeText;

    /**
     * 任务分类ID
     */
    private String categoryId;

    /**
     * 任务分类名称
     */
    private String categoryName;

    /**
     * 任务分类颜色
     */
    private String categoryColor;

    /**
     * 任务标签列表
     */
    private List<String> tagList;

    /**
     * 创建者ID
     */
    private String creatorId;

    /**
     * 创建者名称
     */
    private String creatorName;

    /**
     * 创建者头像
     */
    private String creatorAvatar;

    /**
     * 负责人ID
     */
    private String assigneeId;

    /**
     * 负责人名称
     */
    private String assigneeName;

    /**
     * 负责人头像
     */
    private String assigneeAvatar;

    /**
     * 项目ID
     */
    private String projectId;

    /**
     * 项目名称
     */
    private String projectName;

    /**
     * 父任务ID
     */
    private String parentId;

    /**
     * 父任务标题
     */
    private String parentTitle;

    /**
     * 任务层级
     */
    private Integer level;

    /**
     * 计划开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime plannedStartTime;

    /**
     * 计划结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime plannedEndTime;

    /**
     * 实际开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime actualStartTime;

    /**
     * 实际结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime actualEndTime;

    /**
     * 预估工时（小时）
     */
    private BigDecimal estimatedHours;

    /**
     * 实际工时（小时）
     */
    private BigDecimal actualHours;

    /**
     * 任务进度（0-100）
     */
    private Integer progress;

    /**
     * 完成度（0-100）
     */
    private Integer completionRate;

    /**
     * 是否重要
     */
    private Boolean isImportant;

    /**
     * 是否紧急
     */
    private Boolean isUrgent;

    /**
     * 是否重复任务
     */
    private Boolean isRecurring;

    /**
     * 提醒时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime reminderTime;

    /**
     * 提醒方式文本
     */
    private String reminderTypeText;

    /**
     * 是否已提醒
     */
    private Boolean isReminded;

    /**
     * 附件数量
     */
    private Integer attachmentCount;

    /**
     * 评论数量
     */
    private Integer commentCount;

    /**
     * 子任务数量
     */
    private Integer subtaskCount;

    /**
     * 已完成子任务数量
     */
    private Integer completedSubtaskCount;

    /**
     * 关注人数
     */
    private Integer followerCount;

    /**
     * 是否已关注
     */
    private Boolean isFollowed;

    /**
     * 是否可编辑
     */
    private Boolean canEdit;

    /**
     * 是否可删除
     */
    private Boolean canDelete;

    /**
     * 是否可分配
     */
    private Boolean canAssign;

    /**
     * 任务来源文本
     */
    private String sourceText;

    /**
     * 模板ID
     */
    private String templateId;

    /**
     * 模板名称
     */
    private String templateName;

    /**
     * 排序权重
     */
    private Integer sortOrder;

    /**
     * 自定义字段
     */
    private Object customFields;

    /**
     * 备注
     */
    private String remark;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;

    /**
     * 剩余天数
     */
    private Integer remainingDays;

    /**
     * 是否逾期
     */
    private Boolean isOverdue;

    /**
     * 逾期天数
     */
    private Integer overdueDays;

    /**
     * 子任务列表
     */
    private List<TaskVO> subtasks;

    /**
     * 协作者列表
     */
    private List<TaskAssignmentVO> assignments;

    /**
     * 依赖任务列表
     */
    private List<TaskDependencyVO> dependencies;

    /**
     * 最新评论列表
     */
    private List<TaskCommentVO> recentComments;

    /**
     * 附件列表
     */
    private List<TaskAttachmentVO> attachments;
}
